summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando S <fsahmkow27@gmail.com>2023-08-27 04:26:59 +0200
committerGitHub <noreply@github.com>2023-08-27 04:26:59 +0200
commitada4697300fce6a139bd78d548f151f9f4599ad3 (patch)
treeaeadfc8ee130fa26ec6daeedf1f16606fbeda36d
parentMerge pull request #11356 from lat9nq/console-mode-pg (diff)
parentBuffer Cache: fix discard writes. (diff)
downloadyuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.tar
yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.tar.gz
yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.tar.bz2
yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.tar.lz
yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.tar.xz
yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.tar.zst
yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.zip
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index f0f450edb..8be7bd594 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -289,8 +289,11 @@ std::pair<typename P::Buffer*, u32> BufferCache<P>::ObtainBuffer(GPUVAddr gpu_ad
MarkWrittenBuffer(buffer_id, *cpu_addr, size);
break;
case ObtainBufferOperation::DiscardWrite: {
- IntervalType interval{*cpu_addr, size};
+ VAddr cpu_addr_start = Common::AlignDown(*cpu_addr, 64);
+ VAddr cpu_addr_end = Common::AlignUp(*cpu_addr + size, 64);
+ IntervalType interval{cpu_addr_start, cpu_addr_end};
ClearDownload(interval);
+ common_ranges.subtract(interval);
break;
}
default:
@@ -1159,6 +1162,11 @@ void BufferCache<P>::UpdateDrawIndirect() {
.size = static_cast<u32>(size),
.buffer_id = FindBuffer(*cpu_addr, static_cast<u32>(size)),
};
+ VAddr cpu_addr_start = Common::AlignDown(*cpu_addr, 64);
+ VAddr cpu_addr_end = Common::AlignUp(*cpu_addr + size, 64);
+ IntervalType interval{cpu_addr_start, cpu_addr_end};
+ ClearDownload(interval);
+ common_ranges.subtract(interval);
};
if (current_draw_indirect->include_count) {
update(current_draw_indirect->count_start_address, sizeof(u32),